API: screen: Remove gdk_screen_is_composited()
authorBenjamin Otte <otte@redhat.com>
Sat, 29 Oct 2016 02:37:20 +0000 (04:37 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 29 Oct 2016 02:49:47 +0000 (04:49 +0200)
Switch code to use gdk_display_is_composited() instead.

The new code also doesn't use a vfunc to query the property but rather
requires the backend to call set_composited()/set_rgba() to change the
value.

28 files changed:
docs/reference/gdk/gdk4-sections.txt
gdk/broadway/gdkdisplay-broadway.c
gdk/broadway/gdkscreen-broadway.c
gdk/broadway/gdkscreen-broadway.h
gdk/gdkdisplay.c
gdk/gdkdisplayprivate.h
gdk/gdkscreen.c
gdk/gdkscreen.h
gdk/gdkscreenprivate.h
gdk/mir/gdkmirscreen.c
gdk/quartz/gdkscreen-quartz.c
gdk/wayland/gdkscreen-wayland.c
gdk/win32/gdkdisplay-win32.c
gdk/win32/gdkdisplay-win32.h
gdk/win32/gdkevents-win32.c
gdk/win32/gdkscreen-win32.c
gdk/win32/gdkwindow-win32.c
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdnd-x11.c
gdk/x11/gdkglcontext-x11.c
gdk/x11/gdkscreen-x11.c
gdk/x11/gdkscreen-x11.h
gtk/gtkdnd.c
gtk/gtkwidget.c
gtk/gtkwindow.c
gtk/inspector/general.c
gtk/inspector/inspect-button.c
tests/testgtk.c

index 59834db034bdc05af61164f364da57c3330de4f3..bbae1d92b499024064a12ac5e9fb62a059a881ec 100644 (file)
@@ -180,7 +180,6 @@ GdkScreen
 gdk_screen_get_default
 gdk_screen_get_system_visual
 gdk_screen_get_rgba_visual
-gdk_screen_is_composited
 gdk_screen_get_root_window
 gdk_screen_get_display
 gdk_screen_get_number
index 3b7d718e5f3f5cfc4fd2942fc5eda7afb1236c76..a891e0d69d8786685ae27ed403e94e86c56b9211 100644 (file)
@@ -101,8 +101,6 @@ _gdk_broadway_display_open (const gchar *display_name)
 
   _gdk_broadway_display_init_dnd (display);
 
-  _gdk_broadway_screen_setup (broadway_display->screens[0]);
-
   if (display_name == NULL)
     display_name = g_getenv ("BROADWAY_DISPLAY");
 
index 0bece910e4f5903148738e956160dda53c73003a..b73dac42476d26c36494f833c4b1bc766bd16ad6 100644 (file)
@@ -137,23 +137,6 @@ _gdk_broadway_screen_new (GdkDisplay *display,
   return screen;
 }
 
-/*
- * It is important that we first request the selection
- * notification, and then setup the initial state of
- * is_composited to avoid a race condition here.
- */
-void
-_gdk_broadway_screen_setup (GdkScreen *screen)
-{
-}
-
-static gboolean
-gdk_broadway_screen_is_composited (GdkScreen *screen)
-{
-  return TRUE;
-}
-
-
 static gboolean
 gdk_broadway_screen_get_setting (GdkScreen   *screen,
                                 const gchar *name,
@@ -178,7 +161,6 @@ gdk_broadway_screen_class_init (GdkBroadwayScreenClass *klass)
 
   screen_class->get_display = gdk_broadway_screen_get_display;
   screen_class->get_root_window = gdk_broadway_screen_get_root_window;
-  screen_class->is_composited = gdk_broadway_screen_is_composited;
   screen_class->get_setting = gdk_broadway_screen_get_setting;
   screen_class->get_rgba_visual = gdk_broadway_screen_get_rgba_visual;
   screen_class->get_system_visual = _gdk_broadway_screen_get_system_visual;
index 12c7f2f0e17e4e43035125cd2695316e8b9e40d7..4e91c00b4ab12755c0cdde9a2f5a13d4b3f52d7f 100644 (file)
@@ -68,7 +68,6 @@ struct _GdkBroadwayScreenClass
 GType       gdk_broadway_screen_get_type (void);
 GdkScreen * _gdk_broadway_screen_new      (GdkDisplay *display,
                                           gint   screen_number);
-void _gdk_broadway_screen_setup           (GdkScreen *screen);
 
 G_END_DECLS
 
index 32cd537a4633e3766c4675ad24befb72efbff373..8e5e3b1b75c76cbe4a861495b22f415857aaf9fb 100644 (file)
@@ -2158,7 +2158,21 @@ gdk_display_is_composited (GdkDisplay *display)
 {
   g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
 
-  return gdk_screen_is_composited (gdk_display_get_default_screen (display));
+  return display->composited;
+}
+
+void
+gdk_display_set_composited (GdkDisplay *display,
+                            gboolean    composited)
+{
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+
+  if (display->composited == composited)
+    return;
+
+  display->composited = composited;
+
+  g_object_notify_by_pspec (G_OBJECT (display), props[PROP_COMPOSITED]);
 }
 
 /**
@@ -2190,7 +2204,21 @@ gdk_display_is_rgba (GdkDisplay *display)
 {
   g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
 
-  return gdk_screen_get_rgba_visual (gdk_display_get_default_screen (display)) != NULL;
+  return display->rgba;
+}
+
+void
+gdk_display_set_rgba (GdkDisplay *display,
+                      gboolean    rgba)
+{
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+
+  if (display->rgba == rgba)
+    return;
+
+  display->rgba = rgba;
+
+  g_object_notify_by_pspec (G_OBJECT (display), props[PROP_RGBA]);
 }
 
 
index c2a3c089904bf39dcee8494e7eeeb69a6c488b1f..f22572189f7908cdc8702b5895d9896703f7656f 100644 (file)
@@ -123,6 +123,9 @@ struct _GdkDisplay
   guint has_gl_extension_texture_non_power_of_two : 1;
   guint has_gl_extension_texture_rectangle : 1;
 
+  guint rgba : 1;
+  guint composited : 1;
+
   GdkRenderingMode rendering_mode;
 
   GList *seats;
@@ -328,6 +331,11 @@ GdkWindow *         _gdk_display_create_window        (GdkDisplay       *display
 gboolean            gdk_display_make_gl_context_current  (GdkDisplay        *display,
                                                           GdkGLContext      *context);
 
+void                gdk_display_set_rgba              (GdkDisplay       *display,
+                                                       gboolean          rgba);
+void                gdk_display_set_composited        (GdkDisplay       *display,
+                                                       gboolean          composited);
+
 void                gdk_display_add_seat              (GdkDisplay       *display,
                                                        GdkSeat          *seat);
 void                gdk_display_remove_seat           (GdkDisplay       *display,
index 1ca9807d43c60bcbf13e439c3286c01fdd229218..0b80257564de5ed813c80304d19c27600961b7df 100644 (file)
@@ -65,7 +65,6 @@ enum
 enum
 {
   SIZE_CHANGED,
-  COMPOSITED_CHANGED,
   MONITORS_CHANGED,
   LAST_SIGNAL
 };
@@ -93,25 +92,6 @@ gdk_screen_class_init (GdkScreenClass *klass)
                                                        G_PARAM_READWRITE|G_PARAM_STATIC_NAME|
                                                        G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
 
-  /**
-   * GdkScreen::composited-changed:
-   * @screen: the object on which the signal is emitted
-   *
-   * The ::composited-changed signal is emitted when the composited
-   * status of the screen changes
-   *
-   * Since: 2.10
-   */
-  signals[COMPOSITED_CHANGED] =
-    g_signal_new (g_intern_static_string ("composited-changed"),
-                 G_OBJECT_CLASS_TYPE (klass),
-                 G_SIGNAL_RUN_LAST,
-                 G_STRUCT_OFFSET (GdkScreenClass, composited_changed),
-                 NULL, NULL,
-                 g_cclosure_marshal_VOID__VOID,
-                 G_TYPE_NONE,
-                 0);
-       
   /**
    * GdkScreen::monitors-changed:
    * @screen: the object on which the signal is emitted
@@ -378,30 +358,6 @@ gdk_screen_get_rgba_visual (GdkScreen *screen)
   return GDK_SCREEN_GET_CLASS (screen)->get_rgba_visual (screen);
 }
 
-/**
- * gdk_screen_is_composited:
- * @screen: a #GdkScreen
- *
- * Returns whether windows with an RGBA visual can reasonably
- * be expected to have their alpha channel drawn correctly on
- * the screen.
- *
- * On X11 this function returns whether a compositing manager is
- * compositing @screen.
- *
- * Returns: Whether windows with RGBA visuals can reasonably be
- * expected to have their alpha channels drawn correctly on the screen.
- *
- * Since: 2.10
- **/
-gboolean
-gdk_screen_is_composited (GdkScreen *screen)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
-
-  return GDK_SCREEN_GET_CLASS (screen)->is_composited (screen);
-}
-
 /**
  * gdk_screen_get_setting:
  * @screen: the #GdkScreen where the setting is located
index 0899e1d118a6e327640f57f7827c6bba74a2a0e2..ece84cedf95215c7591d1c33f3983455a43d075d 100644 (file)
@@ -45,8 +45,6 @@ GDK_AVAILABLE_IN_ALL
 GdkVisual *  gdk_screen_get_system_visual     (GdkScreen   *screen);
 GDK_AVAILABLE_IN_ALL
 GdkVisual *  gdk_screen_get_rgba_visual       (GdkScreen   *screen);
-GDK_AVAILABLE_IN_ALL
-gboolean     gdk_screen_is_composited         (GdkScreen   *screen);
 
 GDK_AVAILABLE_IN_ALL
 GdkWindow *  gdk_screen_get_root_window       (GdkScreen   *screen);
index 5234b46a75629477929deda9911b153e32efccad..b65bbbe9b9c9f88ccb19c08427ab08da058d9e56 100644 (file)
@@ -61,7 +61,6 @@ struct _GdkScreenClass
   GList *      (* list_visuals)          (GdkScreen *screen);
   GdkVisual *  (* get_system_visual)     (GdkScreen *screen);
   GdkVisual *  (* get_rgba_visual)       (GdkScreen *screen);
-  gboolean     (* is_composited)         (GdkScreen *screen);
   gboolean     (* get_setting)           (GdkScreen   *screen,
                                           const gchar *name,
                                           GValue      *value);
index 7ec9d1161defceaaa79fa9a2b8d4b38a1601221d..d325e72842035ce80e0f851012d42d50acfae4da 100644 (file)
@@ -411,14 +411,6 @@ gdk_mir_screen_get_rgba_visual (GdkScreen *screen)
   return GDK_MIR_SCREEN (screen)->visual;
 }
 
-static gboolean
-gdk_mir_screen_is_composited (GdkScreen *screen)
-{
-  //g_printerr ("gdk_mir_screen_is_composited\n");
-  /* We're always composited */
-  return TRUE;
-}
-
 static gboolean
 gdk_mir_screen_get_setting (GdkScreen   *screen,
                             const gchar *name,
@@ -720,7 +712,6 @@ gdk_mir_screen_class_init (GdkMirScreenClass *klass)
   screen_class->list_visuals = gdk_mir_screen_list_visuals;
   screen_class->get_system_visual = gdk_mir_screen_get_system_visual;
   screen_class->get_rgba_visual = gdk_mir_screen_get_rgba_visual;
-  screen_class->is_composited = gdk_mir_screen_is_composited;
   screen_class->get_setting = gdk_mir_screen_get_setting;
   screen_class->get_monitor_scale_factor = gdk_mir_screen_get_monitor_scale_factor;
 }
index d29615a7188a50c782d231112010d9a743c23b8c..1c7d251501b3e71f3b0a263997ffcfe57610114b 100644 (file)
@@ -448,12 +448,6 @@ _gdk_quartz_screen_get_monitor_scale_factor (GdkScreen *screen,
   return scale_factor;
 }
 
-static gboolean
-gdk_quartz_screen_is_composited (GdkScreen *screen)
-{
-  return TRUE;
-}
-
 static void
 gdk_quartz_screen_class_init (GdkQuartzScreenClass *klass)
 {
@@ -476,7 +470,6 @@ gdk_quartz_screen_class_init (GdkQuartzScreenClass *klass)
   screen_class->get_monitor_plug_name = gdk_quartz_screen_get_monitor_plug_name;
   screen_class->get_monitor_geometry = gdk_quartz_screen_get_monitor_geometry;
   screen_class->get_monitor_workarea = gdk_quartz_screen_get_monitor_workarea;
-  screen_class->is_composited = gdk_quartz_screen_is_composited;
   screen_class->get_setting = _gdk_quartz_screen_get_setting;
   screen_class->get_rgba_visual = _gdk_quartz_screen_get_rgba_visual;
   screen_class->get_system_visual = _gdk_quartz_screen_get_system_visual;
index c61068825387b671923c38760f51bf44965192bc..0d40c1062cd907c6214750d74709e3152f3b3adc 100644 (file)
@@ -129,12 +129,6 @@ gdk_wayland_screen_get_rgba_visual (GdkScreen *screen)
   return (GdkVisual *) GDK_WAYLAND_SCREEN (screen)->visual;
 }
 
-static gboolean
-gdk_wayland_screen_is_composited (GdkScreen *screen)
-{
-  return TRUE;
-}
-
 static void
 notify_setting (GdkScreen   *screen,
                 const gchar *setting)
@@ -722,7 +716,6 @@ _gdk_wayland_screen_class_init (GdkWaylandScreenClass *klass)
   screen_class->get_root_window = gdk_wayland_screen_get_root_window;
   screen_class->get_system_visual = gdk_wayland_screen_get_system_visual;
   screen_class->get_rgba_visual = gdk_wayland_screen_get_rgba_visual;
-  screen_class->is_composited = gdk_wayland_screen_is_composited;
   screen_class->get_setting = gdk_wayland_screen_get_setting;
   screen_class->list_visuals = gdk_wayland_screen_list_visuals;
 }
index 3eba020e98d85bebbe3f88e54ff64c61e0834d9e..422a83138ad125a4ed6c20e276be0966555f74c4 100644 (file)
@@ -808,6 +808,26 @@ gdk_win32_display_init (GdkWin32Display *display)
 {
   display->monitors = g_ptr_array_new_with_free_func (g_object_unref);
   _gdk_win32_display_init_cursors (display);
+  gdk_win32_display_check_composited (display);
+}
+
+void
+gdk_win32_display_check_composited (GdkWin32Display *display)
+{
+  gboolean composited;
+
+  /* On Windows 8 and later, DWM (composition) is always enabled */
+  if (g_win32_check_windows_version (6, 2, 0, G_WIN32_OS_ANY))
+    {
+      composited = TRUE;
+    }
+  else
+    {
+      if (DwmIsCompositionEnabled (&composited) != S_OK)
+        composited = FALSE;
+    }
+
+  gdk_display_set_composited (GDK_DISPLAY (display), composited);
 }
 
 static void
index 50423b319f218b3871ea18ffd4882263d7bc4578..e36d8c47beca0d4ba1d0464ad8cf6bd768b00bd4 100644 (file)
@@ -60,4 +60,6 @@ gboolean   _gdk_win32_display_init_monitors    (GdkWin32Display *display);
 
 GPtrArray *_gdk_win32_display_get_monitor_list (GdkWin32Display *display);
 
+void        gdk_win32_display_check_composited (GdkWin32Display *display);
+
 #endif /* __GDK_DISPLAY__WIN32_H__ */
index 9854ee0179d904fe17e06b956ebbbfd5d98ffc9e..d7899d9eba0ce73aac5ff9db9206e03cb0d64895 100644 (file)
@@ -3511,6 +3511,7 @@ gdk_event_translate (MSG  *msg,
       break;
 
     case WM_DWMCOMPOSITIONCHANGED:
+      gdk_win32_display_check_composited (GDK_WIN32_DISPLAY (display));
       _gdk_win32_window_enable_transparency (window);
       break;
 
index cf2243c7a3cf69c75a7419e127c231e74f186705..05840df500ee9d9c4dc29002ea064e649603dd9f 100644 (file)
@@ -37,8 +37,6 @@ struct _GdkWin32Screen
   GdkVisualType available_visual_types[1];
 
   GdkWindow *root_window;
-
-  gint always_composited : 1;
 };
 
 struct _GdkWin32ScreenClass
@@ -353,9 +351,6 @@ gdk_win32_screen_init (GdkWin32Screen *win32_screen)
 
   _gdk_win32_display_init_monitors (GDK_WIN32_DISPLAY (_gdk_display));
   init_root_window (win32_screen);
-
-  /* On Windows 8 and later, DWM (composition) is always enabled */
-  win32_screen->always_composited = g_win32_check_windows_version (6, 2, 0, G_WIN32_OS_ANY);
 }
 
 void
@@ -384,21 +379,6 @@ gdk_win32_screen_get_root_window (GdkScreen *screen)
   return GDK_WIN32_SCREEN (screen)->root_window;
 }
 
-static gboolean
-gdk_win32_screen_is_composited (GdkScreen *screen)
-{
-  if (GDK_WIN32_SCREEN (screen)->always_composited)
-    return TRUE;
-  else
-    {
-      gboolean is_composited;
-
-      if (DwmIsCompositionEnabled (&is_composited) != S_OK)
-        return FALSE;
-      return is_composited;
-    }
-}
-
 static GdkVisual *
 gdk_win32_screen_get_system_visual (GdkScreen *screen)
 {
@@ -439,7 +419,6 @@ gdk_win32_screen_class_init (GdkWin32ScreenClass *klass)
 
   screen_class->get_display = gdk_win32_screen_get_display;
   screen_class->get_root_window = gdk_win32_screen_get_root_window;
-  screen_class->is_composited = gdk_win32_screen_is_composited;
   screen_class->get_setting = _gdk_win32_screen_get_setting;
   screen_class->get_system_visual = gdk_win32_screen_get_system_visual;
   screen_class->get_rgba_visual = gdk_win32_screen_get_rgba_visual;
index 0b189a54bae2e47e3ac5d9158d042795ef1a4c74..a68e863b9124e14a8ae4a0c64b90cc6ad4c7f8e5 100644 (file)
@@ -464,7 +464,7 @@ _gdk_win32_window_enable_transparency (GdkWindow *window)
 
   screen = gdk_window_get_screen (window);
 
-  if (!gdk_screen_is_composited (screen))
+  if (!gdk_display_is_composited (gdk_window_get_display (window)))
     return FALSE;
 
   if (window == gdk_screen_get_root_window (screen))
@@ -4911,7 +4911,7 @@ gdk_win32_window_do_move_resize_drag (GdkWindow *window,
        */
       if (impl->layered)
         {
-          if (gdk_screen_is_composited (gdk_window_get_screen (window)))
+          if (gdk_display_is_composited (gdk_window_get_display (window)))
             {
               hdc = NULL;
               window_size_ptr = NULL;
index 50af342a8f11ddc18f7d36607fb35d14a071c0fd..3b2c3057ee9a521e2b1e3cae05e7c88029e35191 100644 (file)
@@ -176,7 +176,6 @@ G_DEFINE_TYPE_WITH_CODE (GdkX11Display, gdk_x11_display, GDK_TYPE_DISPLAY,
                          G_IMPLEMENT_INTERFACE (GDK_TYPE_EVENT_TRANSLATOR,
                                                 gdk_x11_display_event_translator_init))
 
-
 static void
 gdk_x11_display_init (GdkX11Display *display)
 {
@@ -395,6 +394,12 @@ gdk_check_wm_state_changed (GdkWindow *window)
     do_net_wm_state_changes (window);
 }
 
+static Atom
+get_cm_atom (GdkDisplay *display)
+{
+  return _gdk_x11_get_xatom_for_display_printf (display, "_NET_WM_CM_S%d", DefaultScreen (GDK_DISPLAY_XDISPLAY (display)));
+}
+
 static Window
 get_event_xwindow (XEvent             *xevent)
 {
@@ -985,8 +990,13 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
        {
          XFixesSelectionNotifyEvent *selection_notify = (XFixesSelectionNotifyEvent *)xevent;
 
-         _gdk_x11_screen_process_owner_change (screen, xevent);
-         
+          if (selection_notify->selection == get_cm_atom (display))
+            {
+              gboolean composited = selection_notify->owner != None;
+
+              gdk_display_set_composited (display, composited);
+            }
+
          event->owner_change.type = GDK_OWNER_CHANGE;
          event->owner_change.window = window;
           if (selection_notify->owner != None)
@@ -1381,6 +1391,8 @@ _gdk_x11_display_open (const gchar *display_name)
 
   /* initialize the display's screens */ 
   display_x11->screen = _gdk_x11_screen_new (display, DefaultScreen (display_x11->xdisplay));
+  if (gdk_screen_get_rgba_visual (display_x11->screen) == NULL)
+    gdk_display_set_rgba (display, FALSE);
 
   /* We need to initialize events after we have the screen
    * structures in places
@@ -1571,7 +1583,15 @@ _gdk_x11_display_open (const gchar *display_name)
   }
 #endif
 
-  _gdk_x11_screen_setup (display_x11->screen);
+  /*
+   * It is important that we first request the selection
+   * notification, and then setup the initial state of
+   * is_composited to avoid a race condition here.
+   */
+  gdk_display_request_selection_notification (display,
+                                             gdk_x11_xatom_to_atom_for_display (display, get_cm_atom (display)));
+  gdk_display_set_composited (GDK_DISPLAY (display),
+                              XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), get_cm_atom (display)) != None);
 
   g_signal_emit_by_name (display, "opened");
 
index 89460744d1ff50aee537f24c1f9c69d50f2f6c47..596a4de44f2ef1e20f35edecb1577d8d55ed2c00 100644 (file)
@@ -634,7 +634,7 @@ gdk_window_cache_new (GdkScreen *screen)
    * the COW. We assume that the CM is using the COW (which is true for pretty
    * much any CM currently in use).
    */
-  if (gdk_screen_is_composited (screen))
+  if (gdk_display_is_composited (gdk_screen_get_display (screen)))
     {
       cow = XCompositeGetOverlayWindow (xdisplay, GDK_WINDOW_XID (root_window));
       gdk_window_cache_add (result, cow, 0, 0, 
index 6de0e2909bcf8555db1ac1a23a339fd4d175eb28..6d91ddf3503a22278e7e48a5c4a841d2174cd0f2 100644 (file)
@@ -1298,8 +1298,6 @@ gdk_x11_display_make_gl_context_current (GdkDisplay   *display,
 {
   GdkX11GLContext *context_x11;
   Display *dpy = gdk_x11_display_get_xdisplay (display);
-  GdkWindow *window;
-  GdkScreen *screen;
   gboolean do_frame_sync = FALSE;
 
   if (context == NULL)
@@ -1330,14 +1328,11 @@ gdk_x11_display_make_gl_context_current (GdkDisplay   *display,
 
   if (context_x11->is_attached && GDK_X11_DISPLAY (display)->has_glx_swap_interval)
     {
-      window = gdk_gl_context_get_window (context);
-
       /* If the WM is compositing there is no particular need to delay
        * the swap when drawing on the offscreen, rendering to the screen
        * happens later anyway, and its up to the compositor to sync that
        * to the vblank. */
-      screen = gdk_window_get_screen (window);
-      do_frame_sync = ! gdk_screen_is_composited (screen);
+      do_frame_sync = ! gdk_display_is_composited (display);
 
       if (do_frame_sync != context_x11->do_frame_sync)
         {
index 91fa9bec084a32ea1154040339fb94bef173f20f..8555dd3add87815c915d6a53f9ee4f10e90f71e6 100644 (file)
@@ -321,23 +321,6 @@ gdk_x11_screen_get_screen_number (GdkScreen *screen)
   return GDK_X11_SCREEN (screen)->screen_num;
 }
 
-static Atom
-get_cm_atom (GdkX11Screen *x11_screen)
-{
-  return _gdk_x11_get_xatom_for_display_printf (x11_screen->display, "_NET_WM_CM_S%d", x11_screen->screen_num);
-}
-
-static gboolean
-check_is_composited (GdkDisplay *display,
-                    GdkX11Screen *x11_screen)
-{
-  Window xwindow;
-  
-  xwindow = XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), get_cm_atom (x11_screen));
-
-  return xwindow != None;
-}
-
 static GdkX11Monitor *
 find_monitor_by_output (GdkX11Display *x11_display, XID output)
 {
@@ -887,29 +870,6 @@ _gdk_x11_screen_set_window_scale (GdkX11Screen *x11_screen,
   g_signal_emit_by_name (GDK_SCREEN (x11_screen), "monitors-changed");
 }
 
-/*
- * It is important that we first request the selection
- * notification, and then setup the initial state of
- * is_composited to avoid a race condition here.
- */
-void
-_gdk_x11_screen_setup (GdkScreen *screen)
-{
-  GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
-
-  gdk_display_request_selection_notification (x11_screen->display,
-                                             gdk_x11_xatom_to_atom_for_display (x11_screen->display, get_cm_atom (x11_screen)));
-  x11_screen->is_composited = check_is_composited (x11_screen->display, x11_screen);
-}
-
-static gboolean
-gdk_x11_screen_is_composited (GdkScreen *screen)
-{
-  GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
-
-  return x11_screen->is_composited;
-}
-
 static void
 init_randr_support (GdkScreen *screen)
 {
@@ -1030,28 +990,6 @@ _gdk_x11_screen_window_manager_changed (GdkScreen *screen)
   g_signal_emit (screen, signals[WINDOW_MANAGER_CHANGED], 0);
 }
 
-void
-_gdk_x11_screen_process_owner_change (GdkScreen *screen,
-                                     XEvent *event)
-{
-#ifdef HAVE_XFIXES
-  XFixesSelectionNotifyEvent *selection_event = (XFixesSelectionNotifyEvent *)event;
-  GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
-
-  if (selection_event->selection == get_cm_atom (x11_screen))
-    {
-      gboolean composited = selection_event->owner != None;
-
-      if (composited != x11_screen->is_composited)
-       {
-         x11_screen->is_composited = composited;
-
-         g_signal_emit_by_name (screen, "composited-changed");
-       }
-    }
-#endif
-}
-
 static gboolean
 gdk_x11_screen_get_setting (GdkScreen   *screen,
                            const gchar *name,
@@ -1355,7 +1293,6 @@ gdk_x11_screen_class_init (GdkX11ScreenClass *klass)
   screen_class->get_root_window = gdk_x11_screen_get_root_window;
   screen_class->get_system_visual = _gdk_x11_screen_get_system_visual;
   screen_class->get_rgba_visual = gdk_x11_screen_get_rgba_visual;
-  screen_class->is_composited = gdk_x11_screen_is_composited;
   screen_class->get_setting = gdk_x11_screen_get_setting;
   screen_class->list_visuals = _gdk_x11_screen_list_visuals;
 
index d94d14af683bea12d19d5ee65259ab972e6015e4..67cdd531d86cd514620ba879d8d13f2fcc193234 100644 (file)
@@ -71,7 +71,6 @@ struct _GdkX11Screen
    * fetch of window manager name
    */
   guint need_refetch_wm_name : 1;
-  guint is_composited : 1;
   guint xft_init : 1; /* Whether we've intialized these values yet */
   guint xft_antialias : 1;
   guint xft_hinting : 1;
@@ -102,13 +101,10 @@ GType       _gdk_x11_screen_get_type (void);
 GdkScreen * _gdk_x11_screen_new      (GdkDisplay *display,
                                      gint        screen_number);
 
-void _gdk_x11_screen_setup                  (GdkScreen *screen);
 void _gdk_x11_screen_update_visuals_for_gl  (GdkScreen *screen);
 void _gdk_x11_screen_window_manager_changed (GdkScreen *screen);
 void _gdk_x11_screen_size_changed           (GdkScreen *screen,
                                             XEvent    *event);
-void _gdk_x11_screen_process_owner_change   (GdkScreen *screen,
-                                            XEvent    *event);
 void _gdk_x11_screen_get_edge_monitors      (GdkScreen *screen,
                                             gint      *top,
                                             gint      *bottom,
index 238ed915c14f8180431e0cbcd04599e367201619..56ea797f46fa98f622e75ddda303291d4cb62806 100644 (file)
@@ -1579,9 +1579,11 @@ gtk_drag_set_icon_widget_internal (GdkDragContext *context,
 
   if (!info->icon_window)
     {
+      GdkDisplay *display;
       GdkScreen *screen;
 
       screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
+      display = gdk_window_get_display (gdk_drag_context_get_source_window (context));
 
       info->icon_window = gtk_window_new (GTK_WINDOW_POPUP);
       gtk_window_set_type_hint (GTK_WINDOW (info->icon_window), GDK_WINDOW_TYPE_HINT_DND);
@@ -1589,7 +1591,7 @@ gtk_drag_set_icon_widget_internal (GdkDragContext *context,
       gtk_widget_set_size_request (info->icon_window, 24, 24);
       gtk_widget_set_events (info->icon_window, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
 
-      if (gdk_screen_is_composited (screen))
+      if (gdk_display_is_composited (display))
         gtk_widget_set_app_paintable (info->icon_window, TRUE);
 
       gtk_window_set_hardcoded_window (GTK_WINDOW (info->icon_window),
@@ -1779,6 +1781,7 @@ gtk_drag_set_icon_surface (GdkDragContext  *context,
                            cairo_surface_t *surface)
 {
   GtkWidget *window;
+  GdkDisplay *display;
   GdkScreen *screen;
   GdkRectangle extents;
   cairo_pattern_t *pattern;
@@ -1789,6 +1792,7 @@ gtk_drag_set_icon_surface (GdkDragContext  *context,
 
   _gtk_cairo_surface_extents (surface, &extents);
 
+  display = gdk_window_get_display (gdk_drag_context_get_source_window (context));
   screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
 
   window = gtk_window_new (GTK_WINDOW_POPUP);
@@ -1809,8 +1813,8 @@ gtk_drag_set_icon_surface (GdkDragContext  *context,
 
   g_signal_connect_data (window,
                          "draw",
-                         gdk_screen_is_composited (screen) ? G_CALLBACK (gtk_drag_draw_icon_pattern)
-                                                           : G_CALLBACK (gtk_drag_draw_icon_pattern_and_background),
+                         gdk_display_is_composited (display) ? G_CALLBACK (gtk_drag_draw_icon_pattern)
+                                                             : G_CALLBACK (gtk_drag_draw_icon_pattern_and_background),
                          pattern,
                          (GClosureNotify) cairo_pattern_destroy,
                          G_CONNECT_AFTER);
index 6a19227b7b877fa684c7058f090e3a543f001624..c3fa0067a7505255679ebafa688f1e257cf4230f 100644 (file)
@@ -8849,7 +8849,7 @@ gtk_widget_propagate_screen_changed_recurse (GtkWidget *widget,
  *
  * Whether @widget can rely on having its alpha channel
  * drawn correctly. On X11 this function returns whether a
- * compositing manager is running for @widget’s screen.
+ * compositing manager is running for @widget’s display.
  *
  * Returns: %TRUE if the widget can rely on its alpha
  * channel being drawn correctly.
@@ -8859,13 +8859,13 @@ gtk_widget_propagate_screen_changed_recurse (GtkWidget *widget,
 gboolean
 gtk_widget_is_composited (GtkWidget *widget)
 {
-  GdkScreen *screen;
+  GdkDisplay *display;
 
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  screen = gtk_widget_get_screen (widget);
+  display = gtk_widget_get_display (widget);
 
-  return gdk_screen_is_composited (screen);
+  return gdk_display_is_composited (display);
 }
 
 /**
index 18f74cc26500ba490076f57144913d0b92d183b6..e48ed6b7f9f2c5d382361e9555f6e5390d63b1cf 100644 (file)
@@ -3928,37 +3928,21 @@ gtk_window_supports_client_shadow (GtkWindow *window)
 {
   GdkDisplay *display;
   GdkScreen *screen;
-  GdkVisual *visual;
 
   screen = _gtk_window_get_screen (window);
   display = gdk_screen_get_display (screen);
 
+  if (!gdk_display_is_rgba (display))
+    return FALSE;
+
+  if (!gdk_display_is_composited (display))
+    return FALSE;
+
 #ifdef GDK_WINDOWING_X11
   if (GDK_IS_X11_DISPLAY (display))
     {
-      if (!gdk_screen_is_composited (screen))
-        return FALSE;
-
       if (!gdk_x11_screen_supports_net_wm_hint (screen, gdk_atom_intern_static_string ("_GTK_FRAME_EXTENTS")))
         return FALSE;
-
-      /* We need a visual with alpha */
-      visual = gdk_screen_get_rgba_visual (screen);
-      if (!visual)
-        return FALSE;
-    }
-#endif
-
-#ifdef GDK_WINDOWING_WIN32
-  if (GDK_IS_WIN32_DISPLAY (display))
-    {
-      if (!gdk_screen_is_composited (screen))
-        return FALSE;
-
-      /* We need a visual with alpha */
-      visual = gdk_screen_get_rgba_visual (screen);
-      if (!visual)
-        return FALSE;
     }
 #endif
 
index 6709d69a3411ac1ad10f063238bbc3581d02bd55..04df6500e6457cdbf72793bb934db41ef0765327 100644 (file)
@@ -479,7 +479,6 @@ init_display (GtkInspectorGeneral *gen)
   screen = gdk_screen_get_default ();
 
   g_signal_connect (display, "notify", G_CALLBACK (populate_display_notify_cb), gen);
-  g_signal_connect (screen, "composited-changed", G_CALLBACK (populate_display), gen);
   g_signal_connect (screen, "monitors-changed", G_CALLBACK (populate_display), gen);
 
   populate_display (screen, gen);
index e8c55909fef62c535d08c763a884a8821f87a797..241a2d6cb89a13ac8a48e772c6aaccddde363a3b 100644 (file)
@@ -275,10 +275,10 @@ on_highlight_widget (GtkWidget          *button,
 static void
 deemphasize_window (GtkWidget *window)
 {
-  GdkScreen *screen;
+  GdkDisplay *display;
 
-  screen = gtk_widget_get_screen (window);
-  if (gdk_screen_is_composited (screen))
+  display = gtk_widget_get_display (window);
+  if (gdk_display_is_composited (display))
     {
       cairo_rectangle_int_t rect;
       cairo_region_t *region;
@@ -296,10 +296,10 @@ deemphasize_window (GtkWidget *window)
 static void
 reemphasize_window (GtkWidget *window)
 {
-  GdkScreen *screen;
+  GdkDisplay *display;
 
-  screen = gtk_widget_get_screen (window);
-  if (gdk_screen_is_composited (screen))
+  display = gtk_widget_get_display (window);
+  if (gdk_display_is_composited (display))
     {
       gtk_widget_set_opacity (window, 1.0);
       gtk_widget_input_shape_combine_region (window, NULL);
index 85c14d33fcd096243562e84d3bec4ccb347538c8..5fbf6c8650c1f16c861d0dafec9de3e748794d02 100644 (file)
@@ -222,15 +222,19 @@ build_alpha_widgets (void)
 }
 
 static void
-on_composited_changed (GdkScreen *screen,
-                      GtkLabel  *label)
+on_composited_changed (GdkDisplay *display,
+                       GParamSpec *pspec,
+                       GtkLabel   *label)
 {
-  gboolean is_composited = gdk_screen_is_composited (screen);
+  gboolean is_composited = gdk_display_is_composited (display);
 
   if (is_composited)
     gtk_label_set_text (label, "Composited");
   else
     gtk_label_set_text (label, "Not composited");
+
+  /* We draw a different background on the GdkWindow */
+  gtk_widget_queue_draw (gtk_widget_get_toplevel (GTK_WIDGET (label)));
 }
 
 void
@@ -243,7 +247,7 @@ create_alpha_window (GtkWidget *widget)
       GtkWidget *content_area;
       GtkWidget *vbox;
       GtkWidget *label;
-      GdkScreen *screen;
+      GdkDisplay *display;
       
       window = gtk_dialog_new_with_buttons ("Alpha Window",
                                            GTK_WINDOW (gtk_widget_get_toplevel (widget)), 0,
@@ -265,9 +269,9 @@ create_alpha_window (GtkWidget *widget)
       
       label = gtk_label_new (NULL);
       gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE);
-      screen = gtk_widget_get_screen (window);
-      on_composited_changed (screen, GTK_LABEL (label));
-      g_signal_connect (screen, "composited_changed", G_CALLBACK (on_composited_changed), label);
+      display = gtk_widget_get_display (window);
+      on_composited_changed (display, NULL, GTK_LABEL (label));
+      g_signal_connect (display, "notify::composited", G_CALLBACK (on_composited_changed), label);
 
       gtk_box_pack_start (GTK_BOX (vbox), build_alpha_widgets (), TRUE, TRUE);